{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import joblib\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.model_selection import train_test_split\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "def timer(func):\n",
    "    def wrapper(*args,**kwargs):\n",
    "        start = time.time()\n",
    "        result = func(*args,**kwargs)\n",
    "        end = time.time()\n",
    "        print(func.__name__+'运行时间：',end-start)\n",
    "        return result\n",
    "    return wrapper"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### date+week 0.61 0.55"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 12 ms, sys: 4 ms, total: 16 ms\n",
      "Wall time: 16 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "data_date = joblib.load('../../scrum_data/train_data/train_date.lz4')\n",
    "data_week =joblib.load('../../scrum_data/train_data/train_week.lz4')\n",
    "data = pd.concat([data_date,data_week],axis=1,copy=False)\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### null+null_sign \n",
    "train: 0.998 0.68  \n",
    "cv: 0.7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 112 ms, sys: 16 ms, total: 128 ms\n",
      "Wall time: 209 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "data_null = joblib.load('../../scrum_data/train_data/train_null.lz4')\n",
    "data_null_sign = joblib.load('../../scrum_data/train_data/train_null_sign90.lz4')\n",
    "data = pd.concat([data_null,data_null_sign],axis=1)\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## maj+majcnt 1.0 0.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(33465, 4632)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_maj = joblib.load('../../scrum_data/train_data/train_maj.lz4')\n",
    "data_majcnt = joblib.load('../../scrum_data/train_data/train_majcnt.lz4')\n",
    "data = pd.concat([data_maj,data_majcnt],axis=1,copy=False)\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### cross_feature \n",
    "train: 1.0  0.837  \n",
    "cv: 0.838"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(33465, 198)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_cf_fs = joblib.load('../../scrum_data/train_data/train_cf_86_fs10.lz4')\n",
    "data = data_cf_fs\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### raw_fs_100 \n",
    "train：1.0 0.842  \n",
    "cv：0.835"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(33465, 86)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_fs_100 = joblib.load('../../scrum_data/train_data/train_fs_100.lz4')\n",
    "data = data_fs_100\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## concat1\n",
    "train: 1 0.841\n",
    "cv: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(33465, 284)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_cf_fs = joblib.load('../../scrum_data/train_data/train_cf_86_fs10.lz4')\n",
    "data_fs_100 = joblib.load('../../scrum_data/train_data/train_fs_100.lz4')\n",
    "data = pd.concat([data_cf_fs,data_fs_100],axis=1)\n",
    "data_label = pd.read_csv('../../preprocess_data/train_y_33465.csv',usecols=['label'])\n",
    "x_df = data.fillna(-1)\n",
    "y = data_label.values.ravel()\n",
    "x_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "local_test运行时间： 0.09883260726928711\n"
     ]
    }
   ],
   "source": [
    "def stratify_split(x_df,y,random_state=3096,test_size=0.3):\n",
    "    # 层次划分出local test \n",
    "    \n",
    "    x_train_df, x_test_df, y_train, y_test = train_test_split(x_df, y,\n",
    "                                                                random_state=random_state,\n",
    "                                                                test_size=test_size,\n",
    "                                                                stratify=y)\n",
    "    return  x_train_df, x_test_df, y_train, y_test\n",
    "\n",
    "\n",
    "def col_split(x_df,y,col):\n",
    "    '''根据列名分割数据，分为切割后的list'''\n",
    "    x_df['label'] = y\n",
    "    df = x_df\n",
    "    uniq_val = df[col].unique()\n",
    "    df_list = []\n",
    "    for val in uniq_val:\n",
    "        df_list.append(df[df[col]==val])\n",
    "    return df_list\n",
    "        \n",
    "@timer\n",
    "def local_test(x_df,y,split_by_cols=['tag','label']):\n",
    "    '''递归地按列名向下分割，直到只剩最后一个列名，做分层抽样，test_size=0.3'''\n",
    "\n",
    "    mean_cols = list(set(split_by_cols)&set(x_df.columns))+['label']    \n",
    "    if len(mean_cols)==0:\n",
    "        return x_df,y\n",
    "\n",
    "    col = mean_cols[0]\n",
    "    if len(mean_cols) == 1:\n",
    "        x_train_df, x_test_df, y_train, y_test = train_test_split(x_df, y,\n",
    "                                                                random_state=2018,\n",
    "                                                                test_size=0.3,\n",
    "                                                                stratify=y)\n",
    "        return x_train_df, x_test_df, y_train, y_test \n",
    "    \n",
    "    # cols多于1个\n",
    "    df_list = col_split(x_df,y,col)\n",
    "    x_train_df_list = []\n",
    "    x_test_df_list = []\n",
    "    y_train_list = [] \n",
    "    y_test_list = []\n",
    "    for df in df_list:\n",
    "        y_s = df.label.values.ravel()\n",
    "        x_df_s = df.drop(columns=['label'])\n",
    "        x_train_df, x_test_df, y_train, y_test = local_test(x_df_s,y_s,split_by_cols[1:])\n",
    "        \n",
    "        x_train_df_list.append(x_train_df)\n",
    "        x_test_df_list.append(x_test_df)\n",
    "        y_train_list.append(y_train)\n",
    "        y_test_list.append(y_test)\n",
    "    return pd.concat(x_train_df_list),pd.concat(x_test_df_list),np.hstack(y_train_list),np.hstack(y_test_list)\n",
    "\n",
    "x_train_df, x_test_df, y_train, y_test  = local_test(x_df,y,split_by_cols=['tag','label'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((23425, 284), (10040, 284))"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train_df.shape,x_test_df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 本地验证集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\ttraining's auc: 0.885359\tvalid_1's auc: 0.736109\n",
      "[2]\ttraining's auc: 0.923597\tvalid_1's auc: 0.768602\n",
      "[3]\ttraining's auc: 0.94178\tvalid_1's auc: 0.777455\n",
      "[4]\ttraining's auc: 0.95271\tvalid_1's auc: 0.785288\n",
      "[5]\ttraining's auc: 0.959505\tvalid_1's auc: 0.788063\n",
      "[6]\ttraining's auc: 0.963786\tvalid_1's auc: 0.791689\n",
      "[7]\ttraining's auc: 0.968067\tvalid_1's auc: 0.793946\n",
      "[8]\ttraining's auc: 0.971669\tvalid_1's auc: 0.795917\n",
      "[9]\ttraining's auc: 0.973962\tvalid_1's auc: 0.798371\n",
      "[10]\ttraining's auc: 0.976136\tvalid_1's auc: 0.799145\n",
      "[11]\ttraining's auc: 0.97801\tvalid_1's auc: 0.801848\n",
      "[12]\ttraining's auc: 0.979447\tvalid_1's auc: 0.803797\n",
      "[13]\ttraining's auc: 0.980954\tvalid_1's auc: 0.805785\n",
      "[14]\ttraining's auc: 0.982315\tvalid_1's auc: 0.807646\n",
      "[15]\ttraining's auc: 0.983342\tvalid_1's auc: 0.808007\n",
      "[16]\ttraining's auc: 0.984334\tvalid_1's auc: 0.809504\n",
      "[17]\ttraining's auc: 0.985168\tvalid_1's auc: 0.811191\n",
      "[18]\ttraining's auc: 0.985915\tvalid_1's auc: 0.811608\n",
      "[19]\ttraining's auc: 0.986544\tvalid_1's auc: 0.813271\n",
      "[20]\ttraining's auc: 0.987082\tvalid_1's auc: 0.813817\n",
      "[21]\ttraining's auc: 0.987684\tvalid_1's auc: 0.813907\n",
      "[22]\ttraining's auc: 0.988244\tvalid_1's auc: 0.815314\n",
      "[23]\ttraining's auc: 0.988824\tvalid_1's auc: 0.816019\n",
      "[24]\ttraining's auc: 0.989155\tvalid_1's auc: 0.816659\n",
      "[25]\ttraining's auc: 0.989516\tvalid_1's auc: 0.817228\n",
      "[26]\ttraining's auc: 0.989905\tvalid_1's auc: 0.816785\n",
      "[27]\ttraining's auc: 0.990231\tvalid_1's auc: 0.8173\n",
      "[28]\ttraining's auc: 0.990549\tvalid_1's auc: 0.817939\n",
      "[29]\ttraining's auc: 0.990905\tvalid_1's auc: 0.819082\n",
      "[30]\ttraining's auc: 0.991269\tvalid_1's auc: 0.820132\n",
      "[31]\ttraining's auc: 0.991617\tvalid_1's auc: 0.820692\n",
      "[32]\ttraining's auc: 0.99193\tvalid_1's auc: 0.821166\n",
      "[33]\ttraining's auc: 0.99229\tvalid_1's auc: 0.82184\n",
      "[34]\ttraining's auc: 0.992689\tvalid_1's auc: 0.822423\n",
      "[35]\ttraining's auc: 0.992963\tvalid_1's auc: 0.822873\n",
      "[36]\ttraining's auc: 0.993262\tvalid_1's auc: 0.823021\n",
      "[37]\ttraining's auc: 0.993511\tvalid_1's auc: 0.823455\n",
      "[38]\ttraining's auc: 0.993792\tvalid_1's auc: 0.824062\n",
      "[39]\ttraining's auc: 0.993914\tvalid_1's auc: 0.824138\n",
      "[40]\ttraining's auc: 0.994181\tvalid_1's auc: 0.825018\n",
      "[41]\ttraining's auc: 0.994519\tvalid_1's auc: 0.825451\n",
      "[42]\ttraining's auc: 0.994797\tvalid_1's auc: 0.826025\n",
      "[43]\ttraining's auc: 0.99499\tvalid_1's auc: 0.826215\n",
      "[44]\ttraining's auc: 0.995267\tvalid_1's auc: 0.827242\n",
      "[45]\ttraining's auc: 0.995547\tvalid_1's auc: 0.827531\n",
      "[46]\ttraining's auc: 0.995785\tvalid_1's auc: 0.828044\n",
      "[47]\ttraining's auc: 0.996063\tvalid_1's auc: 0.828469\n",
      "[48]\ttraining's auc: 0.996311\tvalid_1's auc: 0.829048\n",
      "[49]\ttraining's auc: 0.996527\tvalid_1's auc: 0.82983\n",
      "[50]\ttraining's auc: 0.996809\tvalid_1's auc: 0.83014\n",
      "[51]\ttraining's auc: 0.996988\tvalid_1's auc: 0.830448\n",
      "[52]\ttraining's auc: 0.997151\tvalid_1's auc: 0.831081\n",
      "[53]\ttraining's auc: 0.997302\tvalid_1's auc: 0.831104\n",
      "[54]\ttraining's auc: 0.997463\tvalid_1's auc: 0.831502\n",
      "[55]\ttraining's auc: 0.997608\tvalid_1's auc: 0.831927\n",
      "[56]\ttraining's auc: 0.997731\tvalid_1's auc: 0.832093\n",
      "[57]\ttraining's auc: 0.997894\tvalid_1's auc: 0.832342\n",
      "[58]\ttraining's auc: 0.998071\tvalid_1's auc: 0.832429\n",
      "[59]\ttraining's auc: 0.998182\tvalid_1's auc: 0.832502\n",
      "[60]\ttraining's auc: 0.998259\tvalid_1's auc: 0.832722\n",
      "[61]\ttraining's auc: 0.998376\tvalid_1's auc: 0.832654\n",
      "[62]\ttraining's auc: 0.998546\tvalid_1's auc: 0.832827\n",
      "[63]\ttraining's auc: 0.998631\tvalid_1's auc: 0.832925\n",
      "[64]\ttraining's auc: 0.998749\tvalid_1's auc: 0.833208\n",
      "[65]\ttraining's auc: 0.998849\tvalid_1's auc: 0.833743\n",
      "[66]\ttraining's auc: 0.998919\tvalid_1's auc: 0.833871\n",
      "[67]\ttraining's auc: 0.998995\tvalid_1's auc: 0.833913\n",
      "[68]\ttraining's auc: 0.999083\tvalid_1's auc: 0.834408\n",
      "[69]\ttraining's auc: 0.999175\tvalid_1's auc: 0.834738\n",
      "[70]\ttraining's auc: 0.999238\tvalid_1's auc: 0.834781\n",
      "[71]\ttraining's auc: 0.99929\tvalid_1's auc: 0.835106\n",
      "[72]\ttraining's auc: 0.999349\tvalid_1's auc: 0.835096\n",
      "[73]\ttraining's auc: 0.999407\tvalid_1's auc: 0.835138\n",
      "[74]\ttraining's auc: 0.99943\tvalid_1's auc: 0.835243\n",
      "[75]\ttraining's auc: 0.999455\tvalid_1's auc: 0.835071\n",
      "[76]\ttraining's auc: 0.999496\tvalid_1's auc: 0.835227\n",
      "[77]\ttraining's auc: 0.999508\tvalid_1's auc: 0.835049\n",
      "[78]\ttraining's auc: 0.999549\tvalid_1's auc: 0.834946\n",
      "[79]\ttraining's auc: 0.999576\tvalid_1's auc: 0.835087\n",
      "[80]\ttraining's auc: 0.999602\tvalid_1's auc: 0.835371\n",
      "[81]\ttraining's auc: 0.999622\tvalid_1's auc: 0.835359\n",
      "[82]\ttraining's auc: 0.999643\tvalid_1's auc: 0.835532\n",
      "[83]\ttraining's auc: 0.999672\tvalid_1's auc: 0.835403\n",
      "[84]\ttraining's auc: 0.999701\tvalid_1's auc: 0.835205\n",
      "[85]\ttraining's auc: 0.999742\tvalid_1's auc: 0.835355\n",
      "[86]\ttraining's auc: 0.999768\tvalid_1's auc: 0.83558\n",
      "[87]\ttraining's auc: 0.999793\tvalid_1's auc: 0.835459\n",
      "[88]\ttraining's auc: 0.999814\tvalid_1's auc: 0.835763\n",
      "[89]\ttraining's auc: 0.999817\tvalid_1's auc: 0.835842\n",
      "[90]\ttraining's auc: 0.999825\tvalid_1's auc: 0.836052\n",
      "[91]\ttraining's auc: 0.999853\tvalid_1's auc: 0.836035\n",
      "[92]\ttraining's auc: 0.999855\tvalid_1's auc: 0.835898\n",
      "[93]\ttraining's auc: 0.999855\tvalid_1's auc: 0.835743\n",
      "[94]\ttraining's auc: 0.999858\tvalid_1's auc: 0.835981\n",
      "[95]\ttraining's auc: 0.999864\tvalid_1's auc: 0.836079\n",
      "[96]\ttraining's auc: 0.999868\tvalid_1's auc: 0.836274\n",
      "[97]\ttraining's auc: 0.99987\tvalid_1's auc: 0.83669\n",
      "[98]\ttraining's auc: 0.99988\tvalid_1's auc: 0.836533\n",
      "[99]\ttraining's auc: 0.999892\tvalid_1's auc: 0.836628\n",
      "[100]\ttraining's auc: 0.999897\tvalid_1's auc: 0.836845\n",
      "[101]\ttraining's auc: 0.99991\tvalid_1's auc: 0.83725\n",
      "[102]\ttraining's auc: 0.999916\tvalid_1's auc: 0.837332\n",
      "[103]\ttraining's auc: 0.999927\tvalid_1's auc: 0.837266\n",
      "[104]\ttraining's auc: 0.999927\tvalid_1's auc: 0.837289\n",
      "[105]\ttraining's auc: 0.999942\tvalid_1's auc: 0.837228\n",
      "[106]\ttraining's auc: 0.999952\tvalid_1's auc: 0.837381\n",
      "[107]\ttraining's auc: 0.999952\tvalid_1's auc: 0.837613\n",
      "[108]\ttraining's auc: 0.999953\tvalid_1's auc: 0.837686\n",
      "[109]\ttraining's auc: 0.999959\tvalid_1's auc: 0.83766\n",
      "[110]\ttraining's auc: 0.999961\tvalid_1's auc: 0.837534\n",
      "[111]\ttraining's auc: 0.999961\tvalid_1's auc: 0.837863\n",
      "[112]\ttraining's auc: 0.999974\tvalid_1's auc: 0.837905\n",
      "[113]\ttraining's auc: 0.999977\tvalid_1's auc: 0.837963\n",
      "[114]\ttraining's auc: 0.999981\tvalid_1's auc: 0.838082\n",
      "[115]\ttraining's auc: 0.999986\tvalid_1's auc: 0.838065\n",
      "[116]\ttraining's auc: 0.999989\tvalid_1's auc: 0.83807\n",
      "[117]\ttraining's auc: 0.999989\tvalid_1's auc: 0.838249\n",
      "[118]\ttraining's auc: 0.999989\tvalid_1's auc: 0.838396\n",
      "[119]\ttraining's auc: 0.999989\tvalid_1's auc: 0.83835\n",
      "[120]\ttraining's auc: 0.999991\tvalid_1's auc: 0.838385\n",
      "[121]\ttraining's auc: 0.999994\tvalid_1's auc: 0.838729\n",
      "[122]\ttraining's auc: 0.999995\tvalid_1's auc: 0.838793\n",
      "[123]\ttraining's auc: 0.999995\tvalid_1's auc: 0.838638\n",
      "[124]\ttraining's auc: 0.999995\tvalid_1's auc: 0.838377\n",
      "[125]\ttraining's auc: 0.999995\tvalid_1's auc: 0.838201\n",
      "[126]\ttraining's auc: 0.999996\tvalid_1's auc: 0.838317\n",
      "[127]\ttraining's auc: 0.999996\tvalid_1's auc: 0.838438\n",
      "[128]\ttraining's auc: 0.999996\tvalid_1's auc: 0.838348\n",
      "[129]\ttraining's auc: 0.999997\tvalid_1's auc: 0.8386\n",
      "[130]\ttraining's auc: 0.999998\tvalid_1's auc: 0.838661\n",
      "[131]\ttraining's auc: 0.999998\tvalid_1's auc: 0.839043\n",
      "[132]\ttraining's auc: 0.999998\tvalid_1's auc: 0.839332\n",
      "[133]\ttraining's auc: 0.999999\tvalid_1's auc: 0.839344\n",
      "[134]\ttraining's auc: 0.999999\tvalid_1's auc: 0.839364\n",
      "[135]\ttraining's auc: 0.999999\tvalid_1's auc: 0.839538\n",
      "[136]\ttraining's auc: 0.999999\tvalid_1's auc: 0.839681\n",
      "[137]\ttraining's auc: 1\tvalid_1's auc: 0.839788\n",
      "[138]\ttraining's auc: 1\tvalid_1's auc: 0.839705\n",
      "[139]\ttraining's auc: 1\tvalid_1's auc: 0.839713\n",
      "[140]\ttraining's auc: 1\tvalid_1's auc: 0.839735\n",
      "[141]\ttraining's auc: 1\tvalid_1's auc: 0.839797\n",
      "[142]\ttraining's auc: 1\tvalid_1's auc: 0.839862\n",
      "[143]\ttraining's auc: 1\tvalid_1's auc: 0.839909\n",
      "[144]\ttraining's auc: 1\tvalid_1's auc: 0.839974\n",
      "[145]\ttraining's auc: 1\tvalid_1's auc: 0.839912\n",
      "[146]\ttraining's auc: 1\tvalid_1's auc: 0.839839\n",
      "[147]\ttraining's auc: 1\tvalid_1's auc: 0.840067\n",
      "[148]\ttraining's auc: 1\tvalid_1's auc: 0.840132\n",
      "[149]\ttraining's auc: 1\tvalid_1's auc: 0.840237\n",
      "[150]\ttraining's auc: 1\tvalid_1's auc: 0.840245\n",
      "[151]\ttraining's auc: 1\tvalid_1's auc: 0.8401\n",
      "[152]\ttraining's auc: 1\tvalid_1's auc: 0.840126\n",
      "[153]\ttraining's auc: 1\tvalid_1's auc: 0.840036\n",
      "[154]\ttraining's auc: 1\tvalid_1's auc: 0.839993\n",
      "[155]\ttraining's auc: 1\tvalid_1's auc: 0.839851\n",
      "[156]\ttraining's auc: 1\tvalid_1's auc: 0.839754\n",
      "[157]\ttraining's auc: 1\tvalid_1's auc: 0.839794\n",
      "[158]\ttraining's auc: 1\tvalid_1's auc: 0.839825\n",
      "[159]\ttraining's auc: 1\tvalid_1's auc: 0.839876\n",
      "[160]\ttraining's auc: 1\tvalid_1's auc: 0.840219\n",
      "[161]\ttraining's auc: 1\tvalid_1's auc: 0.840187\n",
      "[162]\ttraining's auc: 1\tvalid_1's auc: 0.840291\n",
      "[163]\ttraining's auc: 1\tvalid_1's auc: 0.840146\n",
      "[164]\ttraining's auc: 1\tvalid_1's auc: 0.84032\n",
      "[165]\ttraining's auc: 1\tvalid_1's auc: 0.840341\n",
      "[166]\ttraining's auc: 1\tvalid_1's auc: 0.840298\n",
      "[167]\ttraining's auc: 1\tvalid_1's auc: 0.8404\n",
      "[168]\ttraining's auc: 1\tvalid_1's auc: 0.840648\n",
      "[169]\ttraining's auc: 1\tvalid_1's auc: 0.84072\n",
      "[170]\ttraining's auc: 1\tvalid_1's auc: 0.840592\n",
      "[171]\ttraining's auc: 1\tvalid_1's auc: 0.840607\n",
      "[172]\ttraining's auc: 1\tvalid_1's auc: 0.840641\n",
      "[173]\ttraining's auc: 1\tvalid_1's auc: 0.840931\n",
      "[174]\ttraining's auc: 1\tvalid_1's auc: 0.840881\n",
      "[175]\ttraining's auc: 1\tvalid_1's auc: 0.840914\n",
      "[176]\ttraining's auc: 1\tvalid_1's auc: 0.841024\n",
      "[177]\ttraining's auc: 1\tvalid_1's auc: 0.840917\n",
      "[178]\ttraining's auc: 1\tvalid_1's auc: 0.840974\n",
      "[179]\ttraining's auc: 1\tvalid_1's auc: 0.84109\n",
      "[180]\ttraining's auc: 1\tvalid_1's auc: 0.841218\n",
      "[181]\ttraining's auc: 1\tvalid_1's auc: 0.841256\n",
      "[182]\ttraining's auc: 1\tvalid_1's auc: 0.841153\n",
      "[183]\ttraining's auc: 1\tvalid_1's auc: 0.840959\n",
      "[184]\ttraining's auc: 1\tvalid_1's auc: 0.840802\n",
      "[185]\ttraining's auc: 1\tvalid_1's auc: 0.841002\n",
      "[186]\ttraining's auc: 1\tvalid_1's auc: 0.841125\n",
      "[187]\ttraining's auc: 1\tvalid_1's auc: 0.841062\n",
      "[188]\ttraining's auc: 1\tvalid_1's auc: 0.840981\n",
      "[189]\ttraining's auc: 1\tvalid_1's auc: 0.841229\n",
      "[190]\ttraining's auc: 1\tvalid_1's auc: 0.841511\n",
      "[191]\ttraining's auc: 1\tvalid_1's auc: 0.841551\n",
      "[192]\ttraining's auc: 1\tvalid_1's auc: 0.84162\n",
      "[193]\ttraining's auc: 1\tvalid_1's auc: 0.841619\n",
      "[194]\ttraining's auc: 1\tvalid_1's auc: 0.841783\n",
      "[195]\ttraining's auc: 1\tvalid_1's auc: 0.841813\n",
      "[196]\ttraining's auc: 1\tvalid_1's auc: 0.841877\n",
      "[197]\ttraining's auc: 1\tvalid_1's auc: 0.841886\n",
      "[198]\ttraining's auc: 1\tvalid_1's auc: 0.841771\n",
      "[199]\ttraining's auc: 1\tvalid_1's auc: 0.84176\n",
      "[200]\ttraining's auc: 1\tvalid_1's auc: 0.841684\n"
     ]
    }
   ],
   "source": [
    "import lightgbm as lgb\n",
    "parameters = {\n",
    "    'boost':'gbdt',\n",
    "    'num_leaves':120, \n",
    "    'scale_pos_weight':float(len(y)-np.sum(y))/float(np.sum(y)),\n",
    "    'max_depth':-1,\n",
    "    'learning_rate':.05,\n",
    "    'max_bin':200,\n",
    "    'min_data_in_leaf' : 100,\n",
    "    'objective':'binary',\n",
    "    'metric':'auc',\n",
    "    'num_threads':18\n",
    "}\n",
    "\n",
    "\n",
    "lgb_train = lgb.Dataset(x_train_df, y_train)\n",
    "lgb_test = lgb.Dataset(x_test_df, y_test,reference=lgb_train)\n",
    "evals_result = {}\n",
    "\n",
    "lgb_model = lgb.train(parameters,lgb_train,num_boost_round=200, \n",
    "                      valid_sets=[lgb_train, lgb_test],\n",
    "                      evals_result=evals_result,verbose_eval=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\tcv_agg's auc: 0.734853 + 0.00898266\n",
      "[2]\tcv_agg's auc: 0.767615 + 0.0100572\n",
      "[3]\tcv_agg's auc: 0.781214 + 0.00744443\n",
      "[4]\tcv_agg's auc: 0.788676 + 0.00537278\n",
      "[5]\tcv_agg's auc: 0.79378 + 0.00593022\n",
      "[6]\tcv_agg's auc: 0.798716 + 0.00502892\n",
      "[7]\tcv_agg's auc: 0.802001 + 0.00451816\n",
      "[8]\tcv_agg's auc: 0.803888 + 0.00389898\n",
      "[9]\tcv_agg's auc: 0.807046 + 0.00395883\n",
      "[10]\tcv_agg's auc: 0.807905 + 0.003873\n",
      "[11]\tcv_agg's auc: 0.809067 + 0.0036698\n",
      "[12]\tcv_agg's auc: 0.810821 + 0.00323871\n",
      "[13]\tcv_agg's auc: 0.812524 + 0.00353361\n",
      "[14]\tcv_agg's auc: 0.813447 + 0.00322027\n",
      "[15]\tcv_agg's auc: 0.814601 + 0.00347119\n",
      "[16]\tcv_agg's auc: 0.815418 + 0.00327638\n",
      "[17]\tcv_agg's auc: 0.816364 + 0.00340995\n",
      "[18]\tcv_agg's auc: 0.816955 + 0.0032799\n",
      "[19]\tcv_agg's auc: 0.817506 + 0.00295101\n",
      "[20]\tcv_agg's auc: 0.818012 + 0.00291547\n",
      "[21]\tcv_agg's auc: 0.81839 + 0.00301655\n",
      "[22]\tcv_agg's auc: 0.818871 + 0.00258837\n",
      "[23]\tcv_agg's auc: 0.819463 + 0.00223543\n",
      "[24]\tcv_agg's auc: 0.820008 + 0.00188516\n",
      "[25]\tcv_agg's auc: 0.820659 + 0.00180464\n",
      "[26]\tcv_agg's auc: 0.82129 + 0.0019703\n",
      "[27]\tcv_agg's auc: 0.821649 + 0.00174543\n",
      "[28]\tcv_agg's auc: 0.82206 + 0.001958\n",
      "[29]\tcv_agg's auc: 0.822633 + 0.00157408\n",
      "[30]\tcv_agg's auc: 0.823176 + 0.00169024\n",
      "[31]\tcv_agg's auc: 0.823962 + 0.00166279\n",
      "[32]\tcv_agg's auc: 0.824364 + 0.00150078\n",
      "[33]\tcv_agg's auc: 0.824868 + 0.00154875\n",
      "[34]\tcv_agg's auc: 0.825428 + 0.00138136\n",
      "[35]\tcv_agg's auc: 0.825959 + 0.00116063\n",
      "[36]\tcv_agg's auc: 0.826757 + 0.00106288\n",
      "[37]\tcv_agg's auc: 0.82722 + 0.000766422\n",
      "[38]\tcv_agg's auc: 0.827651 + 0.0010591\n",
      "[39]\tcv_agg's auc: 0.828196 + 0.00081511\n",
      "[40]\tcv_agg's auc: 0.828573 + 0.000868771\n",
      "[41]\tcv_agg's auc: 0.828914 + 0.000895317\n",
      "[42]\tcv_agg's auc: 0.829375 + 0.000968188\n",
      "[43]\tcv_agg's auc: 0.829904 + 0.0011447\n",
      "[44]\tcv_agg's auc: 0.830231 + 0.00129231\n",
      "[45]\tcv_agg's auc: 0.830362 + 0.00127923\n",
      "[46]\tcv_agg's auc: 0.830652 + 0.00131586\n",
      "[47]\tcv_agg's auc: 0.830913 + 0.00134785\n",
      "[48]\tcv_agg's auc: 0.83134 + 0.00135464\n",
      "[49]\tcv_agg's auc: 0.831568 + 0.00137909\n",
      "[50]\tcv_agg's auc: 0.831665 + 0.00133843\n",
      "[51]\tcv_agg's auc: 0.831833 + 0.0014494\n",
      "[52]\tcv_agg's auc: 0.832265 + 0.00121261\n",
      "[53]\tcv_agg's auc: 0.832532 + 0.0013237\n",
      "[54]\tcv_agg's auc: 0.832845 + 0.00133189\n",
      "[55]\tcv_agg's auc: 0.833106 + 0.00147913\n",
      "[56]\tcv_agg's auc: 0.833255 + 0.00148975\n",
      "[57]\tcv_agg's auc: 0.833468 + 0.001507\n",
      "[58]\tcv_agg's auc: 0.833879 + 0.00162741\n",
      "[59]\tcv_agg's auc: 0.834017 + 0.00160258\n",
      "[60]\tcv_agg's auc: 0.83408 + 0.00136803\n",
      "[61]\tcv_agg's auc: 0.834344 + 0.00126733\n",
      "[62]\tcv_agg's auc: 0.834654 + 0.00148901\n",
      "[63]\tcv_agg's auc: 0.834946 + 0.00163914\n",
      "[64]\tcv_agg's auc: 0.835267 + 0.00154177\n",
      "[65]\tcv_agg's auc: 0.835419 + 0.00160306\n",
      "[66]\tcv_agg's auc: 0.835628 + 0.00174216\n",
      "[67]\tcv_agg's auc: 0.8358 + 0.00161625\n",
      "[68]\tcv_agg's auc: 0.836057 + 0.00158895\n",
      "[69]\tcv_agg's auc: 0.836099 + 0.00151741\n",
      "[70]\tcv_agg's auc: 0.836073 + 0.00158363\n",
      "[71]\tcv_agg's auc: 0.836118 + 0.00159441\n",
      "[72]\tcv_agg's auc: 0.83624 + 0.00168061\n",
      "[73]\tcv_agg's auc: 0.836446 + 0.00174618\n",
      "[74]\tcv_agg's auc: 0.83654 + 0.00170297\n",
      "[75]\tcv_agg's auc: 0.836561 + 0.00166261\n",
      "[76]\tcv_agg's auc: 0.836748 + 0.00154041\n",
      "[77]\tcv_agg's auc: 0.836783 + 0.00143966\n",
      "[78]\tcv_agg's auc: 0.836786 + 0.00145587\n",
      "[79]\tcv_agg's auc: 0.8368 + 0.00151413\n",
      "[80]\tcv_agg's auc: 0.836762 + 0.00157457\n",
      "[81]\tcv_agg's auc: 0.83695 + 0.0015544\n",
      "[82]\tcv_agg's auc: 0.837079 + 0.00150718\n",
      "[83]\tcv_agg's auc: 0.837201 + 0.00150918\n",
      "[84]\tcv_agg's auc: 0.837419 + 0.00149734\n",
      "[85]\tcv_agg's auc: 0.837432 + 0.00156893\n",
      "[86]\tcv_agg's auc: 0.837476 + 0.00165304\n",
      "[87]\tcv_agg's auc: 0.837699 + 0.00179592\n",
      "[88]\tcv_agg's auc: 0.837714 + 0.00167982\n",
      "[89]\tcv_agg's auc: 0.83768 + 0.00182692\n",
      "[90]\tcv_agg's auc: 0.837727 + 0.00183429\n",
      "[91]\tcv_agg's auc: 0.83789 + 0.00190523\n",
      "[92]\tcv_agg's auc: 0.837857 + 0.0019563\n",
      "[93]\tcv_agg's auc: 0.837966 + 0.00197367\n",
      "[94]\tcv_agg's auc: 0.837978 + 0.00196031\n",
      "[95]\tcv_agg's auc: 0.837955 + 0.00192864\n",
      "[96]\tcv_agg's auc: 0.838286 + 0.0020942\n",
      "[97]\tcv_agg's auc: 0.838118 + 0.00217279\n",
      "[98]\tcv_agg's auc: 0.838255 + 0.00220425\n",
      "[99]\tcv_agg's auc: 0.838257 + 0.0022197\n",
      "[100]\tcv_agg's auc: 0.838247 + 0.0022421\n",
      "[101]\tcv_agg's auc: 0.838339 + 0.0022924\n",
      "[102]\tcv_agg's auc: 0.838335 + 0.00221643\n",
      "[103]\tcv_agg's auc: 0.838404 + 0.00230962\n",
      "[104]\tcv_agg's auc: 0.838474 + 0.00232688\n",
      "[105]\tcv_agg's auc: 0.838503 + 0.0024853\n",
      "[106]\tcv_agg's auc: 0.838653 + 0.0023021\n",
      "[107]\tcv_agg's auc: 0.83863 + 0.00234957\n",
      "[108]\tcv_agg's auc: 0.838685 + 0.00242887\n",
      "[109]\tcv_agg's auc: 0.838708 + 0.00257761\n",
      "[110]\tcv_agg's auc: 0.838749 + 0.00255675\n",
      "[111]\tcv_agg's auc: 0.838843 + 0.00265011\n",
      "[112]\tcv_agg's auc: 0.838949 + 0.00260017\n",
      "[113]\tcv_agg's auc: 0.838797 + 0.00272709\n",
      "[114]\tcv_agg's auc: 0.838875 + 0.00273575\n",
      "[115]\tcv_agg's auc: 0.838876 + 0.00267514\n",
      "[116]\tcv_agg's auc: 0.838946 + 0.00274371\n",
      "[117]\tcv_agg's auc: 0.838928 + 0.00271152\n",
      "[118]\tcv_agg's auc: 0.838999 + 0.00268434\n",
      "[119]\tcv_agg's auc: 0.839213 + 0.00259295\n",
      "[120]\tcv_agg's auc: 0.83922 + 0.00271135\n",
      "[121]\tcv_agg's auc: 0.839066 + 0.00273192\n",
      "[122]\tcv_agg's auc: 0.839124 + 0.00276939\n",
      "[123]\tcv_agg's auc: 0.839182 + 0.00274498\n",
      "[124]\tcv_agg's auc: 0.839176 + 0.00257232\n",
      "[125]\tcv_agg's auc: 0.839166 + 0.00259222\n",
      "[126]\tcv_agg's auc: 0.839281 + 0.00264027\n",
      "[127]\tcv_agg's auc: 0.839337 + 0.00261538\n",
      "[128]\tcv_agg's auc: 0.839468 + 0.00250639\n",
      "[129]\tcv_agg's auc: 0.839434 + 0.00260243\n",
      "[130]\tcv_agg's auc: 0.839426 + 0.00256703\n",
      "[131]\tcv_agg's auc: 0.839429 + 0.0027212\n",
      "[132]\tcv_agg's auc: 0.839594 + 0.00288213\n",
      "[133]\tcv_agg's auc: 0.839672 + 0.00292341\n",
      "[134]\tcv_agg's auc: 0.839586 + 0.00290299\n",
      "[135]\tcv_agg's auc: 0.839603 + 0.00289456\n",
      "[136]\tcv_agg's auc: 0.839619 + 0.00300452\n",
      "[137]\tcv_agg's auc: 0.839578 + 0.00321122\n",
      "[138]\tcv_agg's auc: 0.839669 + 0.00311559\n",
      "[139]\tcv_agg's auc: 0.839712 + 0.00307095\n",
      "[140]\tcv_agg's auc: 0.839744 + 0.00307662\n",
      "[141]\tcv_agg's auc: 0.839611 + 0.00313879\n",
      "[142]\tcv_agg's auc: 0.839678 + 0.00313448\n",
      "[143]\tcv_agg's auc: 0.839664 + 0.00318422\n",
      "[144]\tcv_agg's auc: 0.839752 + 0.00310835\n",
      "[145]\tcv_agg's auc: 0.839748 + 0.00316341\n",
      "[146]\tcv_agg's auc: 0.839891 + 0.0031973\n",
      "[147]\tcv_agg's auc: 0.84002 + 0.00326803\n",
      "[148]\tcv_agg's auc: 0.840123 + 0.00325717\n",
      "[149]\tcv_agg's auc: 0.840167 + 0.00319609\n",
      "[150]\tcv_agg's auc: 0.840308 + 0.00324562\n",
      "[151]\tcv_agg's auc: 0.840211 + 0.00335475\n",
      "[152]\tcv_agg's auc: 0.840314 + 0.0034024\n",
      "[153]\tcv_agg's auc: 0.84024 + 0.00341823\n",
      "[154]\tcv_agg's auc: 0.840308 + 0.00347627\n",
      "[155]\tcv_agg's auc: 0.840437 + 0.00334847\n",
      "[156]\tcv_agg's auc: 0.840402 + 0.0032996\n",
      "[157]\tcv_agg's auc: 0.840516 + 0.00340482\n",
      "[158]\tcv_agg's auc: 0.840466 + 0.00345576\n",
      "[159]\tcv_agg's auc: 0.840468 + 0.00347905\n",
      "[160]\tcv_agg's auc: 0.840569 + 0.0033501\n",
      "[161]\tcv_agg's auc: 0.84066 + 0.00345149\n",
      "[162]\tcv_agg's auc: 0.840788 + 0.00347264\n",
      "[163]\tcv_agg's auc: 0.84085 + 0.00340523\n",
      "[164]\tcv_agg's auc: 0.840693 + 0.00338949\n",
      "[165]\tcv_agg's auc: 0.840808 + 0.00335903\n",
      "[166]\tcv_agg's auc: 0.840917 + 0.00327947\n",
      "[167]\tcv_agg's auc: 0.840986 + 0.00334284\n",
      "[168]\tcv_agg's auc: 0.840842 + 0.0032768\n",
      "[169]\tcv_agg's auc: 0.840797 + 0.00335161\n",
      "[170]\tcv_agg's auc: 0.840756 + 0.00341827\n",
      "[171]\tcv_agg's auc: 0.84089 + 0.00343164\n",
      "[172]\tcv_agg's auc: 0.840894 + 0.00331983\n",
      "[173]\tcv_agg's auc: 0.840862 + 0.0033565\n",
      "[174]\tcv_agg's auc: 0.840869 + 0.00340855\n",
      "[175]\tcv_agg's auc: 0.840894 + 0.00337648\n",
      "[176]\tcv_agg's auc: 0.840845 + 0.0033581\n",
      "[177]\tcv_agg's auc: 0.840769 + 0.003392\n",
      "[178]\tcv_agg's auc: 0.840809 + 0.00326129\n",
      "[179]\tcv_agg's auc: 0.840874 + 0.00330769\n",
      "[180]\tcv_agg's auc: 0.840837 + 0.00338613\n",
      "[181]\tcv_agg's auc: 0.840769 + 0.00348632\n",
      "[182]\tcv_agg's auc: 0.840711 + 0.00344919\n",
      "[183]\tcv_agg's auc: 0.840771 + 0.0035224\n",
      "[184]\tcv_agg's auc: 0.840738 + 0.00341547\n",
      "[185]\tcv_agg's auc: 0.84085 + 0.00356278\n",
      "[186]\tcv_agg's auc: 0.840907 + 0.00357123\n",
      "[187]\tcv_agg's auc: 0.84085 + 0.00361439\n",
      "[188]\tcv_agg's auc: 0.840889 + 0.00363945\n",
      "[189]\tcv_agg's auc: 0.840895 + 0.00362685\n",
      "[190]\tcv_agg's auc: 0.840851 + 0.0037091\n",
      "[191]\tcv_agg's auc: 0.840866 + 0.00374905\n",
      "[192]\tcv_agg's auc: 0.840853 + 0.00369771\n",
      "[193]\tcv_agg's auc: 0.840841 + 0.00374562\n",
      "[194]\tcv_agg's auc: 0.840842 + 0.00367398\n",
      "[195]\tcv_agg's auc: 0.840895 + 0.00368647\n",
      "[196]\tcv_agg's auc: 0.840873 + 0.00371728\n",
      "[197]\tcv_agg's auc: 0.840774 + 0.00374616\n",
      "[198]\tcv_agg's auc: 0.840788 + 0.00378072\n",
      "[199]\tcv_agg's auc: 0.840716 + 0.00382821\n",
      "[200]\tcv_agg's auc: 0.840769 + 0.00382236\n"
     ]
    }
   ],
   "source": [
    "import lightgbm as lgb\n",
    "parameters = {\n",
    "    'boost':'gbdt',\n",
    "    'num_leaves':120, \n",
    "    'scale_pos_weight':float(len(y)-np.sum(y))/float(np.sum(y)),\n",
    "    'max_depth':-1,\n",
    "    'learning_rate':.05,\n",
    "    'max_bin':200,\n",
    "    'min_data_in_leaf' : 100,\n",
    "    'objective':'binary',\n",
    "    'metric':'auc',\n",
    "    'num_threads':18\n",
    "}\n",
    "\n",
    "\n",
    "lgb_train = lgb.Dataset(x_df, y)\n",
    "\n",
    "lgb_model = lgb.cv(parameters,lgb_train,num_boost_round=200, \n",
    "                      nfold=5,seed=2018,verbose_eval=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 绘制学习曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fccd7b62048>]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plt.plot(evals_result['training']['auc'])\n",
    "plt.plot(evals_result['valid_1']['auc'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['training', 'valid_1'])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "evals_result.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
